import { loginAPI, getInfo, getUserDetailById } from '@/api/user'
import { getToken, setToken, removeToken, getTimeStamp, setTimeStamp } from '@/utils/auth'
import { resetRouter } from '@/router'
const state = {
  token: getToken(),
  userInfo: {}
}
const actions = {
  // 登录后获取token回调
  async login({ commit }, data) {
    let token = await loginAPI(data)
    commit('LOGIN', token)
    setTimeStamp()
  },
  // 获取用户信息
  async getUserInfo({ commit }) {
    let result = await getInfo();
    let { staffPhoto } = await getUserDetailById(result.userId)
    let baseResult = { ...result, staffPhoto }
    commit('SETUSERINFO', baseResult)
    return result
  },
  // 删除token
  logOut(context) {
    context.commit('LOGOUT')
    // 重置路由
    resetRouter()
    // 去设置权限模块下路由为初始状态
    // Vuex子模块怎么调用子模块的action 都没加锁的请胯下 可以随意调用
    // 不加命名空间的情况下的 所有的 mutations和action都是挂在全局上的 所有可以直接调用
    // mutations名称 载荷 第三个参数 { root：true }
    context.commit('permission/setRoutes', [], { root: true })
    // 重置多页签
    //子模块调用子模块，需要加第三个参数`{ root: true }`
    context.dispatch('tagsView/delAllViews', null, { root: true })
  }
}
const mutations = {
  // 存储token到vuex中的state
  LOGIN(state, token) {
    state.token = token
    setToken(token)
  },
  // 修改用户信息
  SETUSERINFO(state, userInfo) {
    state.userInfo = userInfo;
  },
  // 用户退出后置空用户信息回调
  LOGOUT(state) {
    // 用户退出登录后 置空token和userInfo 删除token
    state.token = null
    state.userInfo = {};
    removeToken();
  }
}
const getters = {}

export default {
  namespaced: true,
  state,
  actions,
  mutations,
  getters
}